روش استفاده از interface در جاوا و اندروید
عرض سلام
در جاوا تازه کار هستم و پیشاپیش پوزش میخوام اگر سوال مبتدیانست
در برنامه اندروید استودیو در قسمتی از کلاس Adapter اینترفیسی به شکل زیر تعریف شده و با متد stItemClickListener مقدار دهی میشه :
public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {
........
private iClickListener mListener;
public interface iClickListener {
void inItemClick(int position);
}
public void stItemClickListener(iClickListener listener) {
mListener = listener;
}
.......
}
و در متدی در کلاس MainActivity اینترفیس به شکل زیر فراخوانی شده :
Adapter.iClickListener iClickLsnr = new Adapter.iClickListener() {
@Override
public void inItemClick(int position) {
///بازنویسی بدنه متد
}
};
adapter.stItemClickListener(iClickLsnr);
ابهامی که برای بنده ایجاد شده این هست که اینترفیس ها دارای متد سازنده و قابل نمونه نیستند
که در خط زیر در MainActivity ظاهرا New شده و متد سازنده فراخوانی میشه:
new Adapter.iClickListener()
پاسخ هوش مصنوعی
در جاوا، اینترفیس ها قراردادهایی هستند که مشخص می کنند یک کلاس چه متدهایی باید پیاده سازی کند. اما اینترفیس ها نمی توانند به طور مستقیم نمونه سازی شوند زیرا متدهای آن ها به تنهایی پیاده سازی ندارند.
در کدی که شما آورده اید، شما در حال ایجاد یک کلاس ناشناخته (anonymous class) هستید که اینترفیس `iClickListener` را پیاده سازی می کند. این به شما اجازه می دهد برای متدهای تعریف شده در اینترفیس، بدنه مناسب را در آن کلاس ناشناخته بنویسید.
به همین دلیل، در خط زیر:
new Adapter.iClickListener()
شما در واقع یک کلاس ناشناخته (anonymous class) ایجاد می کنید که از اینترفیس `iClickListener` پیروی می کند و متد `inItemClick(int position)` را پیاده سازی می نمایید. این به این معناست که شما هر بار که یک تغییر در متد `inItemClick` اعمال کنید، می توانید رفتار مخصوص به خود را برای آن تعریف کنید.
به طور خلاصه، شما نمی توانید مستقیماً از یک اینترفیس یک شیء ایجاد کنید، اما می توانید با استفاده از کلاس های ناشناخته از آن اینترفیس استفاده کنید تا رفتار مورد نظر خود را پیاده سازی کنید.
اینترفیس ها در واقع کلاس نیستند. بنابراین در بدنه خودشون دارای سازنده یا Constructor نیستند. اما برای استفاده از اونها باید در بدنه کلاس initial بشن. برای initial کردن یا ساختن یک نمونه از اینترفیس ها به دو صورت میشه این کار رو انجام داد.
روش اول تزریق وابستگی یا Dependency Injection هستند که میشه گفت در قطعه کد اولی که فرستادید این کار انجام شده.
روش دوم هم ساختن یک نمونه از اینترفیس هست که در قطعه کد دوم استفاده شده.
معمولا توی برنامه نویسی به روش اول بیشتر کار میشه. ولی ممکنه اینترفیسی باشه که فقط در یک بخش کوچک از کد شما نیاز به استفاده داشته باشه. بنابراین نیاز نیست به روش اول در سازنده اون کلاس initial بشه و میشه در همون بخش از کد یک نمونه ازش new کرد و استفاده کرد تا با این روش منابع کمتری استفاده بشه.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- ویرایش فایل apk و کامپایل مجدد با امکان دانلود
- نحوه انتشار اپیلیکشن اندروید در گوگل پلی چگونه است ؟
- انتخاب تصویر از گالری گوشی در برنامه نویسی اندروید
- مفهوم Deep Link در برنامه نویسی اندروید
- ستون کلید اصلی در دیتابیس از نوع int بهتر است یا Guid
- تفاوت اندروید و زامارین چیست ؟
- دریافت دیتای اشتباه توسط web api
- انواع سنسورهای موجود برای استفاده در برنامه نویسی اندروید
- Context در برنامه نویسی اندروید چیست و چه کاربردی دارد؟
- ساخت اپلیکیشن خانه هوشمند با استفاده از اندروید و ios